package cn.demoncat.util.lang.constant;

import cn.demoncat.util.lang.entity.LinkedMapSs;

/**
 * 状态常量
 * 
 * @author 延晓磊
 *
 * @since 2017年11月6日
 */
public interface StatusConstant {

	/**
	 * 通用状态
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年11月6日
	 */
	interface Common{
		/**
		 * 是
		 */
		String YES = "1";
		/**
		 * 否
		 */
		String NO = "0";
		
		/**
		 * 返回是否常量
		 * 
		 * @param yes
		 * @return
		 * 
		 * @author 延晓磊
		 *
		 * @since 2019年10月29日
		 */
		 static String check(boolean yes) {
			return yes ? YES : NO;
		 }
		
		/**
		 * 判断
		 * 
		 * @param type	YES/NO
		 * @return
		 * 
		 * @author 延晓磊
		 *
		 * @since 2019年10月29日
		 */
		static boolean isYes(String type) {
			return YES.equals(type);
		}

		/**
		 * 判断
		 *
		 * @param type	YES/NO
		 * @return
		 *
		 * @author 延晓磊
		 *
		 * @since 2019年10月29日
		 */
		 static boolean isNo(String type) {
			return NO.equals(type);
		}
	}
	
	/**
	 * 启用状态
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年11月6日
	 */
	interface Enable{
		/**
		 * 启用 
		 */
		String ENABLE = "1";
		/**
		 * 禁用 
		 */
		String DISABLE = "0";
		
		/**
		 * 返回是否常量
		 * 
		 * @param enable
		 * @return
		 * 
		 * @author 延晓磊
		 *
		 * @since 2019年10月29日
		 */
		static String check(boolean enable) {
			return enable ? ENABLE : DISABLE;
		}
	}
	
	/**
	 * 认证状态
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年11月6日
	 */
	interface Auth{
		/**
		 * 初始化/未认证、未提交
		 */
		String INIT = "00";
		
		/**
		 * 初始提交认证
		 */
		String APPLY = "05";
		
		/**
		 * 认证成功/重置成功
		 */
		String SUCCESS = "10";
		/**
		 * 认证成功-重置提交
		 */
		String RESET_APPLY = "15";
		/**
		 * 认证成功-重置驳回
		 */
		String RESET_REJECT = "12";
		/**
		 * 认证成功-认证过期
		 */
		String EXPIRES = "14";
		
		/**
		 * 认证驳回
		 */
		String REJECT = "20";
		
		/**
		 * 是否认证通过
		 * 
		 * @param authStatus	认证状态
		 * @return true：认证成功，认证过期，认证重置
		 * 
		 * @author 延晓磊
		 *
		 * @since 2020年1月17日
		 */
		static boolean isAuth(String authStatus) {
			return authStatus.startsWith(StringConstant.N1);
		}
		
		/**
		 * 是否驳回
		 * 
		 * @param authStatus	认证状态
		 * @return true：认证驳回，重置驳回
		 * 
		 * @author 延晓磊
		 *
		 * @since 2020年1月17日
		 */
		static boolean isReject(String authStatus) {
			return authStatus.equals(REJECT) || authStatus.equals(RESET_REJECT);
		}
		
		/**
		 * 是否重置
		 * 
		 * @param authStatus	认证状态
		 * @return true：重置申请，重置驳回
		 * 
		 * @author 延晓磊
		 *
		 * @since 2020年1月17日
		 */
		static boolean isReset(String authStatus) {
			return authStatus.equals(RESET_APPLY) || authStatus.equals(RESET_REJECT);
		}
	}
	
	/**
	 * 审核状态，认证前缀，审核执行前缀
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年11月6日
	 */
	interface Audit{
		/**
		 * 未审核
		 */
		String INIT = "0";
		/**
		 * 通过(待执行)
		 */
		String OK = "1";
		/**
		 * 驳回(关闭执行)
		 */
		String NO = "2";

		/**
		 * 映射
		 */
		LinkedMapSs MAP = LinkedMapSs.getInstance(INIT, "未审核", OK, "通过", NO, "驳回");

		/**
		 * 是否通过
		 *
		 * @return
		 */
		static boolean isOk(String status){
			return OK.equals(status);
		}
	}
	
	/**
	 * 审核+执行
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年11月6日
	 */
	interface AuditHandle{
		/**
		 * 未审核
		 */
		String INIT = "00";
		/**
		 * 通过(待执行)
		 */
		String OK = "10";
		/**
		 * 驳回(关闭执行)
		 */
		String NO = "20";
		/**
		 * 通过后执行成功
		 */
		String SUCCESS = "11";
		/**
		 * 通过后执行失败
		 */
		String ERROR = "12";
	}
	
	/**
	 * 操作状态
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年11月6日
	 */
	interface Operation{
		/**
		 * 初始化
		 */
		String INIT = "0";
		/**
		 * 成功
		 */
		String SUCCESS = "1";
		/**
		 * 失败
		 */
		String FAIL = "2";
		/**
		 * 取消
		 */
		String CANCEL = "3";
		/**
		 * 过期
		 */
		String EXPIRE = "4";
		/**
		 * 可以操作
		 */
		String ENABLE = "6";
		/**
		 * 禁止操作
		 */
		String DISABLE = "7";
	}
 
	/**
	 * 处理状态
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年11月6日
	 */
	interface Handle{
		/**
		 * 待处理
		 */
		String INIT = "0";
		/**
		 * 处理失败
		 */
		String ERROR = "2";
		/**
		 * 处理超时
		 */
		String EXPIRE = "4";
		/**
		 * 取消处理
		 */
		String CANCEL = "7";
		/**
		 * 无需处理
		 */
		String PERFECT = "8";
		/**
		 * 处理成功
		 */
		String SUCCESS = "9";

		/**
		 * 映射
		 */
		LinkedMapSs MAP = LinkedMapSs.getInstance(INIT,"待处理",ERROR,"处理失败",EXPIRE,"处理超时",CANCEL,"取消处理",PERFECT,"无需处理",SUCCESS,"处理成功");
	}
}
